import paramiko

# ====== 1. 定义你要连接的服务器信息（请替换为你自己的） ======
HOST = '172.24.114.244'        # 服务器的公网IP或者内网IP
USER = 'cc_ubuntu'          # 登录用户名（例如 'root'）
PASSWORD = '789235'        # 用户密码
PORT = 22                   # SSH端口，默认一般为22

def simple_ssh_demo():
    """
    使用Paramiko连接一台Linux服务器，并执行一个简单命令演示
    """
    # 创建一个SSH客户端对象
    client1 = paramiko.SSHClient()
    client2 = paramiko.SSHClient()
    # 设置自动添加主机密钥(防止第一次连接需要手动确认)
    # 作用是：“信任”你尚未连接过的服务器，减少人为干预，适合自动化
    client1.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client2.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    try:
        # 连接到SSH服务器
        # 参数解释:
        # - hostname: 目标服务器地址
        # - port: SSH端口
        # - username: 用户名
        # - password: 密码
        # - timeout: 可选连接超时时间，单位为秒
        client1.connect(
            hostname=HOST,
            port=PORT,
            username=USER,
            password=PASSWORD,
            timeout=10
        )

        client2.connect(
            hostname=HOST,
            port=PORT,
            username=USER,
            password=PASSWORD,
            timeout=10
        )
        
        print("连接成功！")
        
        # 执行一个基本的Linux命令，比如 uname -a，可以用来查看内核和主机信息
        # 返回的stdin, stdout, stderr分别是：标准输入、标准输出、标准错误输出的文件对象
        stdin1, stdout1, stderr1 = client1.exec_command("uname -a")
        stdin2, stdout2, stderr2 = client2.exec_command("ls -la")
        
        # 从命令标准输出读取结果，并解码为字符串
        print("命令输出：")
        print(f"client1: \n{stdout1.read().decode()}")
        print(f"client2: \n{stdout2.read().decode()}")

        # 检查和打印错误输出（如果有的话）
        err1 = stderr1.read().decode()
        if err1:
            print("client1 命令错误输出：")
            print(err1)
        err2 = stderr2.read().decode()
        if err2:
            print("client2 命令错误输出：")
            print(err2)

    except Exception as e:
        # 如果连接或者执行命令过程中有异常，会进入这里
        print(f"连接或命令执行失败: {e}")
    finally:
        # 不管成功还是失败，都要关闭SSH连接，释放资源
        client1.close()
        client2.close()
        print("已断开连接。")

# ====== 如果你直接运行脚本，取消下一行注释即可 ======
simple_ssh_demo()